package com.yejing.poidemo;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.IOUtils;  
import org.apache.poi.xssf.usermodel.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
  
public class WriteImageToExcel {  
    public static void main(String[] args) throws IOException {  
        test0();
    }

    public static void test0(){
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, POI!");


        CellStyle style = cell.getCellStyle();

//        int width = style.getPhysicalWidth(); // 获取单元格的宽度（以1/256个字符宽度为单位）
        int height = (int) style.getVerticalAlignment(); // 获取单元格的高度（以1/256个字符宽度为单位）

//        System.out.println("Width: " + width);
        System.out.println("Height: " + height);
    }

    public static void test1() throws IOException{
        // 创建工作簿对象
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 创建工作表对象
        XSSFSheet sheet = workbook.createSheet("Sheet1");
        // 读取图片文件
        InputStream inputStream = new FileInputStream("d:/2023-11-24-162930.png");
        byte[] bytes = IOUtils.toByteArray(inputStream);
        int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
        inputStream.close();
        // 创建绘图对象
        CreationHelper helper = workbook.getCreationHelper();
        Drawing drawing = sheet.createDrawingPatriarch();

        //在 Apache POI 的 XSSFClientAnchor 类中，dx1, dy1, dx2, dy2 这些参数是用来定义图片或者形状在 Excel 文件中的位置和大小的。
        //
        //dx1, dy1：这些参数代表图片或形状的左上角在单元格中的位置。例如，如果 dx1 = 0.5, dy1 = 0.5，那么图片或形状的左上角将位于单元格的中间。
        //dx2, dy2：这些参数代表图片或形状的右下角在单元格中的位置。例如，如果 dx2 = 2.5, dy2 = 2.5，那么图片或形状的右下角将位于单元格的右下角。
        //这些参数是以十进制的百分比的形式表示的，所以如果你想让一个图片完全填充一个单元格，你可以设置 dx1 = 0, dy1 = 0, dx2 = 100, dy2 = 100。
        //
        //注意，这些参数只控制图片或形状在单元格内的位置，不会改变图片或形状的实际大小。如果你需要改变图片或形状的大小，你可能需要使用其他方法或参数。
        // 创建图形对象
        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setCol1(1);
        anchor.setCol2(2);
        anchor.setRow1(1);
        anchor.setRow2(2);
        Picture pict = drawing.createPicture(anchor, pictureIdx);
        // 设置图片大小自适应单元格大小
        pict.resize();
        // 写入工作簿到文件
        FileOutputStream fileOut = new FileOutputStream("d:/workbook.xlsx");
        workbook.write(fileOut);
        fileOut.close();
    }

    public static void test2() throws IOException{
// 创建工作簿对象
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 创建工作表对象
        XSSFSheet sheet = workbook.createSheet("Sheet1");

        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, POI!");



        // 读取图片文件
        InputStream inputStream = new FileInputStream("d:/2023-11-24-162930.png");
        byte[] bytes = IOUtils.toByteArray(inputStream);
        int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
        inputStream.close();
        // 创建绘图对象
        CreationHelper helper = workbook.getCreationHelper();
        Drawing drawing = sheet.createDrawingPatriarch();
        // 创建图形对象
        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setCol1(1);
        anchor.setCol2(2);
        anchor.setRow1(1);
        anchor.setRow2(2);
        Picture pict = drawing.createPicture(anchor, pictureIdx);
        // 设置图片大小自适应单元格大小
        pict.resize();
        // 写入工作簿到文件
        FileOutputStream fileOut = new FileOutputStream("d:/workbook.xlsx");
        workbook.write(fileOut);
        fileOut.close();
    }

    private static void addImageToSheet(XSSFSheet sheet0, InputStream tpIn, String fileType, int row, int col,int row1,int col1) {
        try{
            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
            BufferedImage bufferImg = ImageIO.read(tpIn);
            ImageIO.write(bufferImg,fileType, byteArrayOut);

            // 起点坐标
            int x1 = col;
            int y1 = row;

            // 终点坐标
            int x2 = col1;
            int y2 = row1;

            // anchor主要用于设置图片的属性
            XSSFDrawing drawing = sheet0.createDrawingPatriarch();
            XSSFClientAnchor anchor1 = new XSSFClientAnchor(0, 0, 0, 0, (short) x1, y1, (short) x2, y2);

            // 插入图片
            int index = sheet0.getWorkbook().addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_PICT);
            drawing.createPicture(anchor1, index);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}